#include "Valores_Variables.h"

Valores::Valores(){
	var_encad[0]=A_INIT;
	var_encad[1]=B_INIT;
	var_encad[2]=C_INIT;
	var_encad[3]=D_INIT;
}
Valores::Valores(Valores& val){
	actualizar_var_encad(val);
}
void Valores::actualizar_var_encad(Valores& val,bool asignar){
	for (size_t idx=0;idx<CANT_VAR_ENCADENAMIENTO;++idx)
		(asignar)?(var_encad[idx]=val[idx]):(var_encad[idx]+=val[idx]);
}
Valores& Valores::operator=(Valores& val){
	actualizar_var_encad(val);
	return *this;
}
Valores& Valores::operator+=(Valores& val){
	actualizar_var_encad(val,false);
	return *this;
}
unsigned& Valores::operator[](const int& idx){
	return var_encad[idx];
}
void Valores::rotar(){
	unsigned aux1=var_encad[0],aux2=0;
	for (size_t idx=1;idx<CANT_VAR_ENCADENAMIENTO;++idx){
		aux2=var_encad[idx];
		var_encad[idx]=aux1;
		aux1=aux2;
	}
	var_encad[0]=aux1;
}
Valores::operator std::string () const {
	std::stringstream resultado;
	size_t tam_var=8;
	for (size_t i=0;i<CANT_VAR_ENCADENAMIENTO;++i){
		std::stringstream aux;
		aux<<std::hex<<var_encad[i];
		std::string var(aux.str());
		int tam=tam_var - var.length();
		if (tam>0){
			std::string relleno;
			relleno.assign(tam,'0');
			var = relleno + var;
		}
		resultado<<var;
	}
	return resultado.str();
}
